package main

import (
	"fmt"
)

/**
执行用时：100 ms, 在所有 Go 提交中击败了54.02%的用户
内存消耗：8.9 MB, 在所有 Go 提交中击败了16.48%的用户
 */
// 自己实现的pair
/****************************************/

type Pair struct {
	x int
	y int
}

func pair(x int, y int) Pair {
	return Pair{x: x, y: y}
}
/****************************************/

const N = 20003

type MyHashMap struct {
	h [][]Pair
}

func Constructor() MyHashMap {

	return MyHashMap{h: make([][]Pair, N)}
}

func find(bin []Pair, key int) int {

	for i := 0; i < len(bin); i++ {
		if bin[i].x == key {
			return i
		}
	}
	return -1
}

func (this *MyHashMap) Put(key int, value int) {
	t := key % N
	k := find(this.h[t], key)
	if k == -1 {
		this.h[t] = append(this.h[t], pair(key, value))
	} else {
		this.h[t][k].y = value
	}
}

func (this *MyHashMap) Get(key int) int {
	t := key % N
	k := find(this.h[t], key)
	if k == -1 {
		return -1
	} else {
		return this.h[t][k].y
	}
}

func (this *MyHashMap) Remove(key int) {
	t := key % N
	k := find(this.h[t], key)
	if k != -1 { this.h[t] = append(this.h[t][:k], this.h[t][k + 1:]...) }
}

func main() {

	obj := Constructor()
	obj.Put(1, 1)
	obj.Put(2, 2)
	fmt.Println(obj.Get(1))  // 1
	fmt.Println(obj.Get(3))  // -1
	obj.Put(2, 12)
	fmt.Println(obj.Get(2))  // 12
	obj.Remove(2)
	fmt.Println(obj.Get(2))  // -1
}
